\documentclass[12pt]{article}
\usepackage{a4wide}
\usepackage[utf8]{inputenc}
\usepackage[spanish]{babel}
\usepackage{color}
\usepackage{url}
\definecolor{lnk}{rgb}{0,0,0.4}
\usepackage[colorlinks=true,linkcolor=lnk,citecolor=black,urlcolor=black]{hyperref}
\usepackage{./otros/caratula}
\usepackage{amssymb}			
\usepackage{pdfpages}
\usepackage{makeidx}

\parskip=1.5pt
	
\usepackage[small, bf, labelformat = empty]{caption}	
\usepackage{subfig}
\usepackage{float}
\restylefloat{table}

\makeindex
	
\begin{document}

%~ Carátula
	\titulo{Taller 2 - Capa de Red}
	\subtitulo{}
	\fecha{6 de Junio de 2012. \\}
	\materia{Teor\'ia de las Comunicaciones}
	\integrante{Ciraco, Agustina}{630/06}{agusciraco@gmail.com}	
    \integrante{Heredia Nadia}{589/08}{nheredia@dc.uba.ar}	    
	\maketitle
% Índice
\small
\newpage \printindex \tableofcontents
\normalsize
\newpage

% Descripci\'on de lo que hicimos
%\section{Desarrollo}
% Las preguntas

\section{Introducci\'on}
%~ resumen de lo que se hizo
En este taller se experiment\'o con distintas herramientas y t\'ecnicas 
de nivel de red. 
El objetivo fue la comprensi\'on de los protocolos involucrados (ARP, 
ICMP, etc) y su utilizaci\'on. Se us\'o ARP e ICMP para implementar 
ping; y por otro lado, ICMP para la implementaci\'on de traceroute.

\section{Primera parte: \texttt{ping} en sus distintos sabores}

\noindent   En ambos casos se recibe la ip destino (dst\_ip) 
	    como par\'ametro.


\subsection{Implementar \texttt{ARPing} usando Scapy}

Se cre\'o un paquete ARP con las siguientes caracter\'isticas
\begin{itemize}
    \item   pdst = dst\_ip (el destino es la direcci\'on 
	    recibida).
    \item   hwdst = ``FF:FF:FF:FF:FF:FF'' (el paquete se 
	    env\'ia a todos los host, usando la 
	    direcci\'on asociada a broadcast). 
    \item   op = 1 (el tipo de operaci\'on es ``who-has''
	    para saber de qu\'e direcci\'on MAC es la ip).
\end{itemize}

\noindent Se envi\'o ese paquete usando \texttt{sr1} para 
obtener una respuesta. Se realizaron 3 intentos, y el 
timeout se sete\'o en 50. El valor de timeout se decidi\'o 
teniendo en cuenta que no fuera demasiado chico como para 
perder una potencial respuesta positiva, ni demasiado grande 
como para perder tiempo esperando una respuesta de un host 
que no est\'a vivo. \\
			
\noindent
Luego se procedi\'o a analizar dicha respuesta. 
Si la respuesta es \texttt{None} significa que no lleg\'o 
ninguna respuesta y por lo tanto suponemos que el host 
no est\'a vivo.
En caso contrario, se verific\'o que el tipo de operaci\'on 
de la respuesta fuera 2, significando que existe una MAC 
a la cual esa IP pertenec\'ia. En este caso, el host est\'a 
vivo, en todos los dem\'as fue considerado como muerto.		
			

\subsection{Implementar \texttt{ICMPing} usando Scapy}

Esta implementaci\'on de ping es similar a la anterior, 
pero usando paquetes ICMP. \\
Se cre\'o un paquete ICMP dentro de uno de tipo IP. 
Por default el paquete ICMP es de tipo ``echo-request''.
El paquete de tipo IP tiene la siguiente
caracter\'istica
\begin{itemize}
    \item   pdst = dst\_ip (el destino es la direcci\'on 
	    recibida).				
\end{itemize}
			
\noindent   Se envi\'o ese paquete de la misma manera que 
	    en la implementaci\'on anterior, usando los mismos 
	    par\'ametros. \\
			
\noindent
Luego se procedi\'o a analizar dicha respuesta. 
Si la respuesta es \texttt{None} significa que no lleg\'o 
ninguna respuesta y por lo tanto suponemos que el host 
no est\'a vivo.
En caso contrario, se verific\'o que el tipo de operaci\'on 
de la respuesta fuera 1, significando que es un 
``echo-reply'' correspondiente al request realizado. 
En este caso, el host est\'a vivo, en todos los dem\'as fue 
considerado como muerto.	
%\paragraph{}

\section{Segunda parte: Network Discovery}
En esta parte se realiza un scan de un rango completo de la red;
detectando, para cada ip perteneciento al rango, el estado del host 
al que le corresponde esa ip. Es decir, para cada uno de esos host, 
devolver si est\'a vivo o no. 

\paragraph{}
As\'i como para ping se tuvieron dos implementaciones, tambi\'en fue 
asi para discovery. Una implementaci\'on utiliza ARPing y otra ICMPing.

\paragraph{}
Se consider\'o que utilizar ICMP es m\'as confiable porque indica 
claramente lo que ocurri\'o, si es que el destino es inalcanzable, 
si se acaba el tiempo, etc.

\paragraph{}
Dadas las especificaciones del protocolo ARP, es un protocolo no-routeable, por lo que el algoritmo de arping implementado s\'olo va a funcionar para una red local.
 %~ Segun la wiki: Since ARP is non-routable, this only works for the local network. However, in networks employing repeaters that use proxy ARP, the ARP response may be coming from such proxy hosts and not from the probed target.

\newpage
\section{Tercera parte: \texttt{traceroute} sobre ICMP}
Para esta secci\'on se realiz\'o una implementaci\'on del algoritmo de \texttt{traceroute} sobre el protocolo \texttt{ICMP} en \texttt{Python}. Luego, se utiliz\'o dicha implementaci\'on para obtener los resultados que se muestran a continuaci\'on. Los mismos se presentan en forma de tabla, indicando la ruta obtenida para cada direcci\'on IP.

\subsection{Rutas obtenidas}

\begin{table}[H]
    \begin{tabular}{c|c|c|c}
	Hop Count & \textbf{google.com} & \textbf{wikipedia.org} 
	& \textbf{kongregate.com} \\
	\hline 
    1 	& '192.168.1.1' 	& '192.168.1.1'		& '192.168.1.1'		\\
    2 	& '192.168.1.1' 	& '192.168.1.1'		& '192.168.1.1'		\\
    3 	& '190.193.171.1' 	& '190.193.171.1'	& '192.168.1.1'		\\
    4 	& None 			    & None			    & None 			\\
    5 	& None 			    & None			    & None 			\\
    6 	& None			    & None			    & None 			\\
    7 	& '200.89.165.177' 	& '200.89.165.177'	& '200.89.165.133'	\\
    8 	& '200.89.165.5'	& '200.89.165.130'	& '200.89.165.150'	\\
    9 	& '200.89.165.222'	& '200.89.165.222'	& '208.50.25.65'	\\
    10 	& '200.49.159.254'	& '207.136.166.241'	& '64.210.28.142'	\\
    11	& '209.85.251.28'	& '67.16.146.173'	& '66.151.144.93'	\\
    12	& '209.85.251.196'	& '67.17.95.49'		& '75.98.84.102'	\\
    13	& '173.194.42.35'	& '67.16.147.142'	& '75.98.92.205'	\\
    14	& '173.194.42.39'	& '4.68.111.121'	& '75.98.92.205'	\\
    15	& '173.194.42.35'	& '4.69.138.91'		& '75.98.92.205'	\\
    16	& '173.194.42.40'	& '4.69.148.214'	& '75.98.92.205'	\\
    17	& '173.194.42.35'	& '4.69.133.13'		& '75.98.92.205'	\\
    18	& '173.194.42.37'	& '4.69.133.18'		& '75.98.92.205'	\\
    19	& '173.194.42.33'	& '4.71.0.14'		& '75.98.92.205'	\\
    20	& '173.194.42.38'	& '84.40.24.50'		& '75.98.92.205'	\\
    21	& '173.194.42.39'	& '84.40.25.102'	& '75.98.92.205'	\\
    22	& '173.194.42.46'	& '208.80.152.201'	& '75.98.92.205'	\\
    23	& '173.194.42.39'	& '208.80.152.201'	& '75.98.92.205'	\\
    24	& '173.194.42.46'	& '208.80.152.201'	& '75.98.92.205'	\\
    25	& '173.194.42.34'	& '208.80.152.201'	& '75.98.92.205'	\\
    26	& '173.194.42.39'	& '208.80.152.201'	& '75.98.92.205'	\\
    27	& '173.194.42.37'	& '208.80.152.201'	& '75.98.92.205'	\\
    28	& '173.194.42.34'	& '208.80.152.201'	& '75.98.92.205'	\\
    29	& '173.194.42.36'	& '208.80.152.201'	& '75.98.92.205'	\\
    30	& '173.194.42.40'	& '208.80.152.201'	& '75.98.92.205'	\\
    31	& '173.194.42.40'	& '208.80.152.201'	& '75.98.92.205'
\end{tabular}	
\end{table}

\subsection{Impacto del horario en las rutas}
Para esta parte decidimos quedarnos con un solo destino, para 
simplificar el an\'alisis. En este caso elegimos \textbf{google.com}.
A continuaci\'on se muestra una tabla con las distintas rutas obtenidas, seg\'un el horario en que se corri\'o el algoritmo implementado por el grupo.

\begin{table}[H]
    \begin{tabular}{c|c|c|c}
	Hop Count & 16:00 hs & 19:30 hs & 21:45 hs \\
	\hline 
    1 	& '192.168.1.1' 	& '192.168.1.1'		& '192.168.1.1'     \\
    2 	& '192.168.1.1' 	& '192.168.1.1'		& '192.168.1.1'     \\
    3 	& '190.193.171.1' 	& '190.193.171.1'	& '190.193.171.1'   \\
    4 	& None 			    & None			    & None              \\
    5 	& None 			    & None			    & None              \\
    6 	& None			    & None			    & None              \\
    7 	& '200.89.165.177' 	& '200.89.165.189'	& '200.89.165.181'  \\
    8 	& '200.89.165.5'	& '200.89.165.130'	& '200.89.165.130'  \\
    9 	& '200.89.165.222'	& '200.89.165.250'	& '200.89.165.222'  \\
    10 	& '200.49.159.254'	& '200.49.159.254'	& '200.49.159.254'  \\
    11	& '209.85.251.28'	& '209.85.251.28'	& '209.85.251.28'   \\
    12	& '209.85.251.196'	& '209.85.251.196'	& '209.85.251.196'  \\
    13	& '173.194.42.35'	& '173.194.42.37'	& '173.194.42.35'   \\
    14	& '173.194.42.39'	& '173.194.42.37'	& '173.194.42.35'   \\
    15	& '173.194.42.35'	& '173.194.42.37'	& '173.194.42.36'   \\
    16	& '173.194.42.40'	& '173.194.42.36'	& '173.194.42.38'   \\
    17	& '173.194.42.35'	& '173.194.42.41'	& '173.194.42.46'   \\
    18	& '173.194.42.37'	& '173.194.42.40'	& '173.194.42.34'   \\
    19	& '173.194.42.33'	& '173.194.42.32'	& '173.194.42.40'   \\
    20	& '173.194.42.38'	& '173.194.42.40'	& '173.194.42.38'   \\
    21	& '173.194.42.39'	& '173.194.42.41'	& '173.194.42.40'   \\
    22	& '173.194.42.46'	& '173.194.42.35'	& '173.194.42.41'   \\
    23	& '173.194.42.39'	& '173.194.42.32'	& '173.194.42.39'   \\
    24	& '173.194.42.46'	& '173.194.42.39'	& '173.194.42.39'   \\
    25	& '173.194.42.34'	& '173.194.42.39'	& '173.194.42.35'   \\
    26	& '173.194.42.39'	& '173.194.42.35'	& '173.194.42.38'   \\
    27	& '173.194.42.37'	& '173.194.42.33'	& '173.194.42.33'   \\
    28	& '173.194.42.34'	& '173.194.42.34'	& '173.194.42.41'   \\
    29	& '173.194.42.36'	& '173.194.42.32'	& '173.194.42.40'   \\
    30	& '173.194.42.40'	& '173.194.42.34'	& '173.194.42.42'   \\
    31	& '173.194.42.40'	& '173.194.42.32'	& '173.194.42.40'
\end{tabular}	
\end{table}

\newpage
\paragraph{}
Se puede observar que si bien los host en las rutas encontradas no son siempre los mismos, las redes por las que pasa s\'i. 
Esto nos llev\'o a concluir que, las rutas para llegar; por ejemplo a \texttt{google.com}, como en este caso; desde un mismo host en una red, pasan siempre por las mismas redes y no necesariamente por los mismos hosts. 

\newpage
\section{Cuarta parte: An\'alisis de \texttt{traceroute}}

\subsection{Usando \texttt{traceroute} de linux}

\begin{table}[H]
    \begin{tabular}{c|c|c|c}
    Hop Count & \textbf{google.com} & \textbf{wikipedia.org}
	& \textbf{kongregate.com} \\
	\hline 
    1 	& '192.168.1.1' 	& '192.168.1.1'		& '192.168.1.1'		\\
    2 	& '190.193.171.1' 	& '190.193.171.1' 	& '190.193.171.1'	\\
    3 	& * * *			    & * * *			    & * * *			\\
    4 	& * * *			    & * * *			    & * * *			\\
    5 	& * * *			    & * * *			    & * * *			\\
    6	& '200.89.165.189'	& '200.89.165.17'	& '200.89.165.157'	\\
    7	& '200.89.165.137'	& '200.89.165.157'	& '200.89.165.181'	\\
    8	& '200.89.165.5'	& '200.89.165.189'	& '200.89.165.150'	\\
    9	& '200.89.165.250'	& '200.89.165.130'	& '208.50.25.65'	\\
    10	& '200.49.159.254'	& '200.89.165.222'	& '64.210.28.142'	\\
    11	& '209.85.251.28'	& '207.136.166.241'	& '66.151.144.92'	\\
    12	& '209.85.251.196'	& '67.16.146.173'	& '66.151.144.92'	\\
    13	&  '173.194.42.37'	& '67.17.95.49'		& '66.151.144.92'	\\
    14	&  			        & '67.17.95.142'	& '75.98.84.98'		\\
    15	&  			        & '4.68.111.121'	& * * *			\\
    16	&  			        & '4.69.138.91'		& * * *			\\
    17	&  			        & '4.69.148.214'	& * * *			\\
    18	&  			        & '4.69.133.13'		& * * *			\\
    19	&  			        & '4.69.133.18'		& * * *			\\
    20	&  			        & '4.71.0.14'		& * * *			\\
    21	&  			        & '84.40.24.50'		& * * *			\\
    22	&  			        & '84.40.25.102'	& * * *			\\
    23	&  			        & '208.80.152.201'	& * * *			\\
    24	&  			        & 			& * * *			\\
    25	&  			        & 			& * * *			\\
    26	&  			        & 			& * * *			\\
    27	&  			        & 			& * * *			\\
    28	&  			        & 			& * * *			\\
    29	&  			        & 			& * * *			\\
    30	&  			        & 			& * * *			\\
    31	&  			        & 			& * * *			
    \end{tabular}	
\end{table}

\subsection{Usando \texttt{tcptraceroute} de linux}

\begin{table}[H]
    \begin{tabular}{c|c|c|c}
    Hop Count & \textbf{google.com} & \textbf{wikipedia.org}
	& \textbf{kongregate.com} \\
	\hline 
    1 	& '192.168.1.1' 	& '192.168.1.1'		& '192.168.1.1'		\\
    2 	& * * *		 	& * * *		 	& * * *			\\
    3 	& * * *			& * * *			& * * *			\\
    4 	& * * *			& * * *			& * * *			\\
    5 	& * * *			& * * *			& * * *			\\
    6	& '200.89.165.181'	& '200.89.165.185'	& '200.89.165.181'	\\
    7	& '200.89.165.165'	& '200.89.165.181'	& '200.89.165.189'	\\
    8	& '200.89.165.130'	& '200.89.165.130'	& '200.89.165.150'	\\
    9	& * * *			& * * *			& '208.50.25.65'	\\
    10	& '200.49.159.254'	& * * *			& * * *			\\
    11	& * * * 		& * * * 		& * * *			\\
    12	& * * *			& * * * 		& * * *			\\
    13	& * * *		 	& '67.16.147.142'	& * * *			\\
    14	& '173.194.42.34'	& '4.68.111.121'	& '75.98.92.205'	\\
    15	&  			& '4.69.138.91'		& 			\\
    16	&  			& * * * 		& 			\\
    17	&  			& * * * 		& 			\\
    18	&  			& * * *			& 			\\
    19	&  			& * * *			& 			\\
    20	&  			& '84.40.24.50'		& 			\\
    21	&  			& '84.40.25.102'	& 			\\
    22	&  			& * * *			& 			\\
    23	&  			& * * *			& 			\\
    24	&  			& * * *			& 			\\
    25	&  			& * * *			& 			\\
    26	&  			& '208.80.152.201.'	& 			    
    \end{tabular}	
\end{table}

La diferencia principal que podemos observar entre la implementaci\'on del algoritmo de \texttt{traceroute} realizada por el grupo y la de linux; es que la de linux temina cuando llega a la misma red del destino. 
En cambio, la realizada por el grupo sigue hasta que recibe una respuesta del destino mismo al que busca y/o llega al m\'aximo ttl definido.

\newpage
\subsection{Hip\'otesis sobre las diferencias encontradas}

Las diferencias vistas entre las diferentes implementaciones, nos llevan a concluir que al algoritmo implementado le basta con ir identificando la red por la que pasa y no el host puntual, lo que lleva a no inundar de paquetes innecesarios la red. En cambio el implementado por el grupo, pasa y registra tambi\'en los host por los que pasa, inundando de paquetes innecesarios la red.

\subsection{Comportamiento en red privada con gateway}
¿Qu\'e ocurrir\'ia si se corriese un \texttt{traceroute} implementado 
con opciones IP desde un host en una red privada que sale a Internet a 
trav\'es de un gateway?

\paragraph{}
Lo que ocurrir\'ia es que al estar en una red privada con un gateway, el gateway ignorar\'ia, filtrar\'ia, o desconocer\'ia los paquetes que llegan en respuesta a los echo request enviados por el host que realiza el traceroute. 
Por lo tanto el traceroute no funcionar\'ia para los ips que se 
encuentren fuera de la red, porque en ning\'un momento se llegar\'ia.
El algoritmo seguiri\'ia corriendo y terminar\'ia por timeout ya que 
no se recibir\'ian respuestas.
\end{document}






















